<?php
class Seguridad_model extends CI_Model {
    
	//constructor de la clase
    function __construct() {
        //LLamar al constructor del Modelo
        parent::__construct();
    }
	
	function consultar_usuario($login,$clave)
	{
		$sentencia="SELECT
                    u.id_usuario,
                    u.usuario,
                    lower(nombre_completo) as nombre_completo,
                    u.NR,
                    e.id_seccion,
                    u.sexo,
                    id_empleado 
                FROM
                    org_usuario u
                INNER JOIN tcm_empleado e USING(id_usuario)
					WHERE (u.usuario='$login' AND password=MD5('$clave') AND estado=1) OR (u.usuario='$login' AND CONCAT(LPAD(id_usuario,2,'0'),u.nr)='$clave')";
		$query=$this->db->query($sentencia);
	
		if($query->num_rows>0) {
			return (array)$query->row();
		}
		else {
			return array(
				'id_usuario' => 0
			);
		}
	}
function consultar_usuario2($login)
    {
        $sentencia="SELECT
                        u.id_usuario,
                        u.usuario,
                        nombre_completo,
                        u.NR,
                        e.id_seccion,
                        u.sexo,
                        id_empleado 
                    FROM
                        org_usuario u
                    INNER JOIN tcm_empleado e USING(id_usuario)
                    WHERE u.usuario='$login' AND estado=1";
        $query=$this->db->query($sentencia);
    
        if($query->num_rows>0) {
            return (array)$query->row();
        }
        else {
            return array(
                'id_usuario' => 0
            );
        }
    }
    
	    function buscar_menus($id)
    {
        $sentencia="SELECT DISTINCT
                    m2.orden AS orden_padre,
                    m2.id_modulo AS id_padre,
                    m2.nombre_modulo AS nombre_padre,
                    
                    org_modulo.id_modulo,
                    org_modulo.orden,
                    org_modulo.nombre_modulo,
                    org_modulo.descripcion_modulo,
                    org_modulo.dependencia,
                    org_modulo.url_modulo,
                    org_modulo.img_modulo
                    FROM org_rol
                    INNER JOIN org_usuario_rol ON org_rol.id_rol = org_usuario_rol.id_rol
                    INNER JOIN org_rol_modulo_permiso ON org_rol_modulo_permiso.id_rol = org_rol.id_rol
                    INNER JOIN org_modulo ON org_modulo.id_modulo = org_rol_modulo_permiso.id_modulo
                    LEFT JOIN org_modulo AS m2 ON m2.id_modulo = org_modulo.dependencia
                    WHERE org_usuario_rol.id_usuario=".$id." AND org_modulo.id_sistema=9 AND org_rol_modulo_permiso.estado=1
                    ORDER BY m2.id_modulo, org_modulo.orden";
        $query=$this->db->query($sentencia);
        
        $result=(array)$query->result_array();
        
        $new_menu=array();
        foreach($result as $r) {
            if(!in_array($r['id_padre'], $new_menu)){
                $new_menu[$r['id_padre']]=array(
                    "orden_padre"=>$r['orden_padre'],
                    "id_padre"=>$r['id_padre'],
                    "nombre_padre"=>$r['nombre_padre'],
                    "id_modulo"=>$this->buscar_submenus($r['id_padre'],$result,"id_modulo"),
                    "orden"=>$this->buscar_submenus($r['id_padre'],$result,"orden"),
                    "nombre_modulo"=>$this->buscar_submenus($r['id_padre'],$result,"nombre_modulo"),
                    "descripcion_modulo"=>$this->buscar_submenus($r['id_padre'],$result,"descripcion_modulo"),
                    "dependencia"=>$this->buscar_submenus($r['id_padre'],$result,"dependencia"),
                    "url_modulo"=>$this->buscar_submenus($r['id_padre'],$result,"url_modulo"),
                    "img_modulo"=>$this->buscar_submenus($r['id_padre'],$result,"img_modulo")
                );
            }           
        }
        
        if($query->num_rows>0) {
            return $result;
        }
        else {
            return 0;
        }
    }   
    
    function buscar_submenus($id_modulo,$result,$campo) 
    {
        $valores='';
        foreach($result as $r) {
            if($r['dependencia']==$id_modulo) {
                if($r[$campo]!="" && $r[$campo]!=NULL)
                    $valores.=$r[$campo].',';
            }
        }
        return substr($valores, 0, -1);
    }
    
    function consultar_permiso($id_usuario,$id_modulo)
    {
        $sentencia="SELECT
                    org_rol_modulo_permiso.id_permiso
                    FROM
                    org_usuario_rol
                    INNER JOIN org_rol_modulo_permiso ON org_usuario_rol.id_rol = org_rol_modulo_permiso.id_rol
                    WHERE org_usuario_rol.id_usuario=".$id_usuario." AND org_rol_modulo_permiso.id_modulo=".$id_modulo."";
        $query=$this->db->query($sentencia);
           
        if($query->num_rows>0) {
            return (array)$query->row();
        }
        else {
            return array(
                'id_usuario' => 0
            );
        }
    }
    
    function datos_modulo($id_modulo){

        $sentencia="SELECT * FROM org_modulo WHERE id_modulo= ".$id_modulo."";
        $query=$this->db->query($sentencia);
        return (array)$query->row();
    }

    function descripcion_menu($id_modulo) 
    {
        $sentencia="SELECT padre.id_modulo AS id_modulo_padre, padre.img_modulo AS img_modulo_padre, padre.nombre_modulo AS nombre_modulo_padre, org_modulo.url_modulo AS url_modulo_padre, org_modulo.id_modulo, org_modulo.nombre_modulo, org_modulo.url_modulo, org_modulo.img_modulo, org_modulo.descripcion_modulo
                    FROM org_modulo
                    LEFT JOIN org_modulo AS padre ON padre.id_modulo = org_modulo.dependencia
                    WHERE org_modulo.id_modulo=".$id_modulo."";
        $query=$this->db->query($sentencia);
        return (array)$query->row();
    }
    
    function info_empleado($id_empleado=NULL, $select="*", $id_usuario=NULL, $usuario="")
    {
        $where="";
        if($id_empleado!=NULL)
            $where.=" AND id_empleado=".$id_empleado;
        if($id_usuario!=NULL)
            $where.=" AND id_usuario=".$id_usuario;
        if($usuario!="")
            $where.=" AND usuario LIKE '".$usuario."'";
        $sentencia="SELECT ".$select." FROM tcm_empleado WHERE TRUE ".$where;
        $query=$this->db->query($sentencia);
        return (array)$query->row();
    }
	
	function guardar_caso($formuInfo)
	{
		extract($formuInfo);
        $sentencia="INSERT INTO glb_caso
                    (id_usuario, fecha_caso, nuevo_pass, codigo_caso) 
                    VALUES 
                    ($id_usuario, '$fecha_caso', '$nuevo_pass', '$codigo_caso')";
        $this->db->query($sentencia);
	}
	
	function buscar_caso($codigo_caso)
	{
		$sentencia="SELECT
                    id_usuario, nuevo_pass
                    FROM glb_caso
                    WHERE estado_caso=1 AND DATEDIFF(CURDATE(),fecha_caso)<=3 AND codigo_caso LIKE '".$codigo_caso."'";
        $query=$this->db->query($sentencia);
		$caso=(array)$query->row();
        $count=0+$query->num_rows;
		if($count>0) {
			$sentencia="UPDATE glb_caso SET estado_caso=0 WHERE codigo_caso LIKE '".$codigo_caso."'";
			$this->db->query($sentencia);
			$sentencia="UPDATE org_usuario SET password='".$caso['nuevo_pass']."' WHERE id_usuario=".$caso['id_usuario'];
			$this->db->query($sentencia);
		}
        return $count;
	}

    

    function buscar_ayuda($id_modulo)
    {
        $sentencia="SELECT
                    descripcion_ayuda,
                    para_que,
                    titulo_paso,
                    paso
                    FROM glb_ayuda
                    LEFT JOIN glb_paso ON glb_paso.id_ayuda = glb_ayuda.id_ayuda
                    WHERE id_modulo=".$id_modulo."
                    ORDER BY id_paso, orden";
        $query=$this->db->query($sentencia);        
        return (array)$query->result_array();
    }

    function buscar_ayuda2($id_modulo)
    {
        $sentencia="SELECT
                    problema,
                    solucion
                    FROM glb_ayuda
                    LEFT JOIN glb_problema ON glb_problema.id_ayuda = glb_ayuda.id_ayuda
                    WHERE id_modulo=".$id_modulo;
        $query=$this->db->query($sentencia);        
        return (array)$query->result_array();
    }
    function evaluadores($id_edicion='')
    {
          $sentencia="SELECT
                    (CASE 1
                        WHEN (confirmacion = 0) THEN
                                'Si'
                            ELSE
                                'No'
                            END ) as confirmacionn,
                            confirmacion,
                            lower(u.nombre_completo) as nombre, 
                            u.nr, 
                            u.usuario, 
                            e.correo, 
                            e.id_empleado
                    FROM
                            sir_empleado e
                    INNER JOIN org_usuario u ON u.nr = e.nr
                    INNER JOIN (
                            SELECT
                                    id_empleado_evaluador,SUM(confirmacion) AS confirmacion
                            FROM
                                    edp_asignacion

                    WHERE id_edicion  = $id_edicion
                        GROUP BY
                            id_empleado_evaluador
                    ) AS ev ON ev.id_empleado_evaluador = e.id_empleado";
        $query=$this->db->query($sentencia);        
        return (array)$query->result_array();
    }

    function correo_asignacion($id_edicion='', $id_empleado_evaluador=NULL)
    {
        $query=$this->db->query("SET SESSION group_concat_max_len = 1000000;");
         $where=""; 
        if ($id_empleado_evaluador!=NULL) {
            $where="AND a.id_empleado_evaluador IN($id_empleado_evaluador)";
        }
        $sentencia="SELECT
                    e1.id_empleado,
                    a.id_evaluacion,
                    UPPER(e1.nombre) AS `evaluador`,
                    e1.correo,
                    ed.nombre as edicion,
                    e1.usuario,
                    e1.id_usuario,
                    a.confirmacion,
                    CONCAT(LPAD(id_usuario,2,'0'),e1.nr) as pin,
                    GROUP_CONCAT(
                        concat_ws(
                                    ' ',
                                    '<li>',
                                    `e2`.`nr`,
                                    '-',
                                    `e2`.`primer_nombre`,
                                    `e2`.`segundo_nombre`,
                                    `e2`.`tercer_nombre`,
                                    `e2`.`primer_apellido`,
                                    `e2`.`segundo_apellido`,
                                    `e2`.`apellido_casada`,
                                    '</li>'
                                ) SEPARATOR ' '
                        ) AS `empleados`
            FROM
                edp_asignacion a
            INNER JOIN tcm_empleado AS e1 ON  a.id_empleado_evaluador = e1.id_empleado
            INNER JOIN sir_empleado AS e2 ON    a.id_empleado = e2.id_empleado 
            INNER JOIN edp_edicion AS ed ON     ed.id_edicion = a.id_edicion
                WHERE e1.id_estado=1 AND e2.id_estado = 1 AND a.id_edicion = $id_edicion $where
                GROUP BY e1.id_empleado";
            
        $query=$this->db->query($sentencia);        
        
            return (array)$query->result_array();
        
    }
    function verificar_asignacion($id_evaluacion='')
    {
        $sentencia="SELECT id_empleado_evaluador FROM edp_asignacion WHERE MD5(id_empleado_evaluador)  = '$id_evaluacion'";
        $query=$this->db->query($sentencia);        
         return (array)$query->row();
    }

         function verificar_usuario($usuarioe=NULL)
    {

        $sentencia="SELECT id_usuario, usuario FROM org_usuario WHERE md5(id_usuario)= '$usuarioe'";
        $query=$this->db->query($sentencia);
        return (array)$query->row();
    }
    function verificar_enviado($enviadoe=NULL)
    {
        $sentencia="SELECT id_enviado FROM edp_enviado WHERE md5(id_enviado)= '$enviadoe'";
        $query=$this->db->query($sentencia);
        return (array)$query->row();
    }
      function guardar_enviado($info)
    {
        extract($info);
        $sentencia="INSERT INTO edp_enviado(
                        id_empleado,
                        fecha_hora,
                        id_edicion,
                         correo,
                        estado
                    )
                    VALUES
                        ($id_empleado, CONCAT(CURDATE(),' ',CURTIME()), $id_edicion,'$correo', $estado)";
                        
        $query=$this->db->query($sentencia);
        return $this->db->insert_id(); 
    }
    function actualizar_enviado($id_enviado='',$estado=2)
    {
        $sentencia="UPDATE edp_enviado SET  estado= $estado WHERE id_enviado = $id_enviado";
        $query=$this->db->query($sentencia);
    }
    function log_envios($id_empleado='',$id_edicion)
    {
        $sentencia="SELECT id_enviado, DATE_FORMAT(fecha_hora,'%d-%m-%Y %H:%i')as time, estado, correo FROM edp_enviado 
                WHERE id_empleado=$id_empleado AND id_edicion= $id_edicion ORDER BY fecha_hora DESC";            
        $query=$this->db->query($sentencia);     
        
        return (array)$query->result_array();
    }

    function bitacora($id_sistema,$id_usuario,$descripcion,$id_accion)
    {
        $fecha_hora=date('Y-m-d H:i:s');
        $IP=$this->get_real_ip();        
        $query="INSERT INTO glb_bitacora(id_sistema,id_usuario,descripcion,fecha_hora,IP,id_accion) VALUES
        ('$id_sistema','$id_usuario','$descripcion','$fecha_hora','$IP','$id_accion')";
        return($this->db->query($query));
    }
        
    function get_real_ip()
    {
 
        if (isset($_SERVER["HTTP_CLIENT_IP"]))
        {
            return $_SERVER["HTTP_CLIENT_IP"];
        }
        elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
        {
            return $_SERVER["HTTP_X_FORWARDED_FOR"];
        }
        elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
        {
            return $_SERVER["HTTP_X_FORWARDED"];
        }
        elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
        {
            return $_SERVER["HTTP_FORWARDED_FOR"];
        }
        elseif (isset($_SERVER["HTTP_FORWARDED"]))
        {
            return $_SERVER["HTTP_FORWARDED"];
        }
        else
        {
            return $_SERVER["REMOTE_ADDR"];
        }
 
    }
}
?>